Computer systems often utilize some type of non-volatile data storage. For example, computer systems may have multiple storage devices, such as one or more hard drives, solid state drives, etc. When multiple storage devices are used, they can be arranged in various ways to provide certain levels of resiliency. Different levels of resiliency can be achieved by different mirroring schemes or parity schemes. For example, a moderate level of resiliency can be achieved by a mirroring scheme that maintains two copies of data, where the different copies are on one or more different device arrangements. Even more redundancy can be achieved by having three copies of data on three different device arrangements. The first example can tolerate a single device failure while the second example could tolerate two device failures. Alternatively, various parity schemes, such as redundant array of independent disks systems, could be used to obtain resiliency. Parity schemes use less disk space than mirroring schemes, but have lower levels of performance because of the need to perform various computations to create the parity.
When a system designer designs storage for a system, they will typically determine general requirements for the data in the system and configure a storage entity. An entity can be portions of one or more storage devices arranged to appear and function as a particular data storage unit, such as a volume to the system. However, once a storage entity is configured for the system, that storage entity is fixed in its constraints. For example, if so configured, a storage entity will always be simple storage with a fixed capacity, mirrored storage with a certain number of copies, or parity storage with a certain resiliency.
Data may have certain handling requirements that change over time, or different data introduced into the system may have different handling requirements. In particular, data may have certain performance and/or resiliency requirements. Performance requirements are related to how quickly data can be accessed whereas resiliency requirements are related to the ability to maintain data availability in the context of hardware failures or other data access or data loss.
Presently, system designers may have several different storage entities configured to meet different data requirements for data. However, if data requirements change for data, or if new data is introduced into the system having data requirements that differ drastically from that provided by available storage entities, the system designer may need to design and add new storage entities and/or make inefficient use of existing storage entities, such as by storing data in an entity that far exceeds the requirements for the data.
It is with respect to these and other considerations that the disclosure made herein is presented. The subject matter claimed herein is not limited to embodiments that solve any disadvantages or that operate only in environments such as those described above. Rather, this background is only provided to illustrate one exemplary technology area where some embodiments described herein may be practiced.